home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch14 / Grid.cls < prev    next >
Text File  |  1999-06-22  |  3KB  |  115 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "Grid3d"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = False
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Private Xmin As Single      ' Min X and Y values.
  17. Private Zmin As Single
  18. Private Dx As Single        ' Spacing between rows of data.
  19. Private Dz As Single
  20. Private NumX As Integer     ' Number of X and Y entries.
  21. Private NumZ As Integer
  22. Private Points() As Point3D ' Data values.
  23. ' Create the Points array.
  24. Public Sub SetBounds(ByVal x1 As Single, ByVal deltax As Single, ByVal xnum As Integer, ByVal z1 As Single, ByVal deltaz As Single, ByVal znum As Integer)
  25. Dim i As Integer
  26. Dim j As Integer
  27. Dim X As Single
  28. Dim Z As Single
  29.  
  30.     Xmin = x1
  31.     Zmin = z1
  32.     Dx = deltax
  33.     Dz = deltaz
  34.     NumX = xnum
  35.     NumZ = znum
  36.     ReDim Points(1 To NumX, 1 To NumZ)
  37.     
  38.     X = Xmin
  39.     For i = 1 To NumX
  40.         Z = Zmin
  41.         For j = 1 To NumZ
  42.             Points(i, j).coord(1) = X
  43.             Points(i, j).coord(2) = 0
  44.             Points(i, j).coord(3) = Z
  45.             Points(i, j).coord(4) = 1#
  46.             Z = Z + Dz
  47.         Next j
  48.         X = X + Dx
  49.     Next i
  50. End Sub
  51. ' Save the indicated data value.
  52. Public Sub SetValue(ByVal X As Single, ByVal Y As Single, ByVal Z As Single)
  53. Dim i As Integer
  54. Dim j As Integer
  55.  
  56.     i = (X - Xmin) / Dx + 1
  57.     j = (Z - Zmin) / Dz + 1
  58.     Points(i, j).coord(2) = Y
  59. End Sub
  60.  
  61. ' Apply a transformation matrix which may not
  62. ' contain 0, 0, 0, 1 in the last column to the
  63. ' object.
  64. Public Sub ApplyFull(M() As Single)
  65. Dim i As Integer
  66. Dim j As Integer
  67.  
  68.     For i = 1 To NumX
  69.         For j = 1 To NumZ
  70.             m3ApplyFull Points(i, j).coord, M, Points(i, j).trans
  71.         Next j
  72.     Next i
  73. End Sub
  74.  
  75. ' Apply a transformation matrix to the object.
  76. Public Sub Apply(M() As Single)
  77. Dim i As Integer
  78. Dim j As Integer
  79.  
  80.     For i = 1 To NumX
  81.         For j = 1 To NumZ
  82.             m3Apply Points(i, j).coord, M, Points(i, j).trans
  83.         Next j
  84.     Next i
  85. End Sub
  86.  
  87.  
  88. ' Draw the transformed points on a PictureBox.
  89. Public Sub Draw(ByVal pic As Object)
  90. Dim i As Integer
  91. Dim j As Integer
  92.  
  93.     On Error Resume Next
  94.  
  95.     ' Draw lines parallel to the X axis.
  96.     For i = 1 To NumX
  97.         pic.CurrentX = Points(i, 1).trans(1)
  98.         pic.CurrentY = Points(i, 1).trans(2)
  99.         For j = 2 To NumZ
  100.             pic.Line -(Points(i, j).trans(1), _
  101.                           Points(i, j).trans(2))
  102.         Next j
  103.     Next i
  104.     
  105.     ' Draw lines parallel to the Y axis.
  106.     For j = 1 To NumZ
  107.         pic.CurrentX = Points(1, j).trans(1)
  108.         pic.CurrentY = Points(1, j).trans(2)
  109.         For i = 2 To NumX
  110.             pic.Line -(Points(i, j).trans(1), _
  111.                           Points(i, j).trans(2))
  112.         Next i
  113.     Next j
  114. End Sub
  115.